package controller;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import constants.Estado;

import dao.CategoriaDAO;
import dao.EquipoDAO;
import dao.TorneoDAO;

import viewObjects.EquipoVO;
import viewObjects.TorneoVO;

import model.Categoria;
import model.Equipo;
import model.Torneo;

public class Controller {

	public ArrayList<Torneo> torneos;
	
	private static Controller application;
	public static Controller getInstace(){
		if (application == null)
			application = new Controller();		
		
		return application;
	}
	
	private Controller(){
		torneos = new ArrayList<Torneo>();
		
	}
	
	public TorneoVO obtenerTorneo(int id) {
		return TorneoDAO.getInstance().obtenerTorneo(id).getExtendedView();
	}

	
	public TorneoVO nuevoTorneo(String nombre, String descripcion, String fechaInicio) {
		
		Torneo t = new Torneo();
		Calendar cal = Calendar.getInstance();
		t.setFechaCreacion(cal.getTime());
		t.setDescripcion(descripcion);
		t.setNombre(nombre);
		t.setEstado(Estado.PENDIENTE);		
		
		SimpleDateFormat formatter = new SimpleDateFormat("dd/mm/yyyy");
		Date dateFechaInicio;
		try {
			dateFechaInicio = formatter.parse(fechaInicio);
			t.setFechaInicio(dateFechaInicio);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		boolean res = TorneoDAO.getInstance().persist(t);		//PERSISTIR EL TORNEO
		if(res == true){
			TorneoVO tvo = t.getExtendedView();
			return tvo;
		}else{
			return null;
		}

	}

	public ArrayList<EquipoVO> obtenerEquiposSinAsignacion() {
		return EquipoDAO.getInstance().getEquiposSinAsignacion();
	}

	//crea categoria nueva en torneo nuevo
	public void crearCategoriaNueva(int idTorneo, String nombreCat, String[] equiposList, Character nivel) { 

		ArrayList<Equipo> equipos = EquipoDAO.getInstance().obtenerEquipos(equiposList);
		Torneo torneo = TorneoDAO.getInstance().obtenerTorneo(idTorneo);
		Categoria nuevaCat = new Categoria();
		nuevaCat.setDescripcion(nombreCat);
		nuevaCat.setFechaInicio(torneo.getFechaInicio());
		nuevaCat.setNivel(nivel);
		nuevaCat.generarFixtureNuevaCategoria(equipos); //es sin ascensos
		nuevaCat.setPosicionesIniciales(equipos);
		//nuevaCat.addEquiposParticipantes(equipos);
		CategoriaDAO.getInstance().persist(nuevaCat,torneo);

		//TorneoDAO.getInstance().update(torneo);
	}

	
	
	
}
